package br.com.leilao.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.leilao.util.ConstantsBD;
@NamedQueries({
	@NamedQuery(name = "getEditaisAbertos", query = "SELECT i FROM Edital i " +
			"where i.dataFechamento >= :dataHoje " +
			"AND " +
			"i.dataAbertura <= :dataHoje") 
	})
@Entity
@Table(name = ConstantsBD.DATABASE_TABLE_EDITAL)
public class Edital implements Serializable{
	
	private static final long serialVersionUID = 3253270386545235530L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int idEdital;
	
	@Column(name="dataAbertura",nullable=false,insertable=true,unique=false,updatable=false)
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataAbertura;
	
	@Column(name="dataFechamento",nullable=false,insertable=true,unique=false,updatable=false)
	@Temporal(TemporalType.TIMESTAMP)	
	private Date dataFechamento;
	
	@OneToOne(fetch=FetchType.LAZY)
	@JoinColumn(referencedColumnName="codigo")
	private Produto produto;
	
	@Column(name="aberto",nullable=false,insertable=true,unique=false,updatable=true)
	private boolean aberto;
	
	public Edital() {
	}
	
	public Edital(int idEdital, Date dataAbertura, Date dataFechamento, Produto produto, boolean aberto) {
		this.idEdital = idEdital;
		this.dataAbertura = dataAbertura;
		this.dataFechamento = dataFechamento;
		this.produto = produto;
		this.aberto = aberto;
	}

	public int getIdEdital() {
		return idEdital;
	}

	public void setIdEdital(int idEdital) {
		this.idEdital = idEdital;
	}

	public Date getDataAbertura() {
		return dataAbertura;
	}
	
	public void setDataAbertura(Date dataAbertura) {
		this.dataAbertura = dataAbertura;
	}
	public Date getDataFechamento() {
		return dataFechamento;
	}
	public void setDataFechamento(Date dataFechamento) {
		this.dataFechamento = dataFechamento;
	}
	public Produto getProduto() {
		return produto;
	}
	public void setProduto(Produto produto) {
		this.produto = produto;
	}
	public boolean isAberto() {
		return aberto;
	}
	public void setAberto(boolean aberto) {
		this.aberto = aberto;
	}
	
}
